NHibernate ব্যবহার করার জন্য প্রথমে আপনাকে আপনার ডেটাবেস টেবিলগুলির জন্য Entity Class তৈরি করতে হবে। এই ক্লাসগুলি ORM মডেল হিসেবে কাজ করে, এবং তাদের মাধ্যমে আপনি ডেটাবেসে CRUD (Create, Read, Update, Delete) অপারেশন করতে পারবেন। Entity Class গুলোকে সঠিকভাবে ম্যাপিং করতে Data Annotations ব্যবহার করা হয়, যা NHibernate এর সাথে ক্লাসগুলোকে সম্পর্কিত করে।
1. Entity Class তৈরি করা
Entity Class হল সেই C# ক্লাস যা ডেটাবেস টেবিলের সারি (row) এর সাথে মেলানো হয়। প্রতিটি Entity Class এর ফিল্ড/প্রপার্টি একটি টেবিলের কলাম (column) এর সাথে ম্যাপ হয়।
ধরা যাক, আমরা একটি Employee টেবিলের Entity Class তৈরি করতে যাচ্ছি। এর জন্য নিম্নলিখিত স্টেপ অনুসরণ করা যেতে পারে:
using System;
public class Employee
{
public virtual int Id { get; set; } // Primary Key
public virtual string Name { get; set; } // Employee Name
public virtual int Age { get; set; } // Employee Age
public virtual string Department { get; set; } // Department Name
}
এখানে:
Idপ্রপার্টি হলো Primary Key যা টেবিলের ইউনিক আইডেন্টিফায়ার।Name,Age, এবংDepartmentপ্রপার্টি গুলো Employee টেবিলের কলামগুলোর প্রতিনিধিত্ব করে।
2. Entity Class এ Data Annotations ব্যবহার করা
Data Annotations হল একটি C# বৈশিষ্ট্য (attribute), যা Entity ক্লাসের প্রপার্টি এবং ফিল্ডগুলোর সাথে ডেটাবেসের কলামগুলির সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। NHibernate এ Entity ক্লাসের প্রপার্টিগুলোকে ম্যাপিং করার জন্য Data Annotations ব্যবহার করা হয়।
সাধারণ Data Annotations:
- [Key]: এটি একটি প্রপার্টিকে Primary Key হিসেবে চিহ্নিত করে।
- [Table]: এটি Entity Class কে নির্দিষ্ট একটি ডেটাবেস টেবিলের সাথে সংযুক্ত করে।
- [Column]: এটি Entity এর প্রপার্টি কে টেবিলের নির্দিষ্ট কলামের সাথে ম্যাপ করে।
- [Required]: এটি একটি প্রপার্টিকে আবশ্যক হিসেবে চিহ্নিত করে, অর্থাৎ ফিল্ডটি নাল (null) হতে পারে না।
- [StringLength]: এটি স্ট্রিং প্রপার্টির সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করে।
ধরা যাক, আমরা পূর্বের Employee ক্লাসে Data Annotations প্রয়োগ করতে চাই।
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("Employee")] // টেবিলের নাম উল্লেখ করা হয়েছে
public class Employee
{
[Key] // Primary Key
public virtual int Id { get; set; }
[Required] // এই প্রপার্টি নাল (null) হতে পারবে না
[StringLength(100)] // সর্বোচ্চ দৈর্ঘ্য 100 ক্যারেকটার
public virtual string Name { get; set; }
[Range(18, 65)] // বয়স ১৮ থেকে ৬৫ এর মধ্যে থাকতে হবে
public virtual int Age { get; set; }
[StringLength(50)] // বিভাগের নামের সর্বোচ্চ দৈর্ঘ্য ৫০ ক্যারেকটার
public virtual string Department { get; set; }
}
এখানে:
- [Table("Employee")] এটিকে Employee নামে একটি টেবিলের সাথে ম্যাপ করে।
- [Key] এটিকে Primary Key হিসেবে চিহ্নিত করেছে।
- [Required] এবং [StringLength] এটিকে বাধ্যতামূলক এবং দৈর্ঘ্য নির্ধারণ করেছে।
- [Range] বয়সের জন্য একটি সীমা নির্ধারণ করেছে (১৮ থেকে ৬৫ বছর)।
3. Entity Class এবং Data Annotations এর সাহায্যে NHibernate ম্যাপিং
NHibernate এর জন্য Entity ক্লাসের সঙ্গে Data Annotations ব্যবহার করা হলে, সাধারণত ম্যাপিং ফাইলের প্রয়োজন হয় না, কারণ NHibernate এই অ্যানোটেশনগুলিকে স্বয়ংক্রিয়ভাবে বুঝে ম্যাপিং করবে। তবে, কিছু পরিস্থিতিতে Fluent NHibernate বা XML Mapping এর মাধ্যমে আরো কাস্টমাইজড ম্যাপিং করতে হতে পারে।
4. NHibernate এ Entity Class ব্যবহারের উদাহরণ
একটি সাধারন Session ওপেন করার পর, Entity Class এর ডেটা সেভ, আপডেট, বা রিড করার জন্য নিচের কোডটি ব্যবহার করা যেতে পারে:
using NHibernate;
using NHibernate.Cfg;
using System;
public class NHibernateHelper
{
private static ISessionFactory sessionFactory;
public static ISessionFactory SessionFactory
{
get
{
if (sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure(); // hibernate.cfg.xml ফাইল লোড হবে
sessionFactory = configuration.BuildSessionFactory(); // সেশন ফ্যাক্টরি তৈরি
}
return sessionFactory;
}
}
}
public class SessionExample
{
public void SaveEmployee()
{
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
try
{
// নতুন Employee অবজেক্ট তৈরি
var employee = new Employee { Name = "John Doe", Age = 30, Department = "HR" };
// ডেটাবেসে সেভ করা
session.Save(employee);
// ট্রানজেকশন কমিট করা
transaction.Commit();
}
catch (Exception)
{
// কোনো সমস্যা হলে ট্রানজেকশন রোলব্যাক করা
transaction.Rollback();
throw;
}
}
}
}
}
এখানে:
- SaveEmployee মেথডে নতুন Employee অবজেক্ট তৈরি করে সেশন মাধ্যমে এটি ডেটাবেসে সেভ করা হচ্ছে।
- transaction.Commit() ব্যবহার করে ট্রানজেকশন সফলভাবে সম্পন্ন হচ্ছে।
5. Entity Class এর সাথে Data Annotations ব্যবহার করার সুবিধা
- কমপ্যাক্ট এবং সহজ: Data Annotations সরাসরি Entity Class এ রাখা হয়, যা কোডকে কমপ্যাক্ট এবং পরিষ্কার রাখে।
- ডেভেলপমেন্টের সময় দ্রুত যাচাই: প্রপার্টি গুলোর উপর অ্যানোটেশন ব্যবহার করলে ডেভেলপাররা সহজেই বুঝতে পারেন কোন প্রপার্টি কী ধরনের রুল অনুসরণ করছে (যেমন নাল হতে পারবে না, সর্বোচ্চ দৈর্ঘ্য কত, ইত্যাদি)।
- এডিটেবল এবং রিয়ুজেবল: Entity Class গুলো বারবার ব্যবহৃত হতে পারে এবং Data Annotations এর মাধ্যমে সেগুলির সাথে সংযুক্ত ডেটাবেস রুলগুলো সহজেই প্রয়োগ করা যায়।
এইভাবে, Entity Class তৈরি এবং Data Annotations ব্যবহার করে NHibernate এ আপনার ORM মডেল তৈরি করতে পারেন এবং ডেটাবেসের সাথে যোগাযোগের জন্য প্রপার কনফিগারেশন করতে পারেন।
Read more